﻿using EasyCLRMisc;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.Data.SqlTypes;
using System.Collections;

namespace UnitTest
{


    /// <summary>
    ///Dies ist eine Testklasse für "TabledValueFunctionTest" und soll
    ///alle TabledValueFunctionTest Komponententests enthalten.
    ///</summary>
    [TestClass()]
    public class TabledValueFunctionTest
    {


        private TestContext testContextInstance;

        /// <summary>
        ///Ruft den Testkontext auf, der Informationen
        ///über und Funktionalität für den aktuellen Testlauf bietet, oder legt diesen fest.
        ///</summary>
        public TestContext TestContext
        {
            get
            {
                return testContextInstance;
            }
            set
            {
                testContextInstance = value;
            }
        }

        #region Zusätzliche Testattribute
        // 
        //Sie können beim Verfassen Ihrer Tests die folgenden zusätzlichen Attribute verwenden:
        //
        //Mit ClassInitialize führen Sie Code aus, bevor Sie den ersten Test in der Klasse ausführen.
        //[ClassInitialize()]
        //public static void MyClassInitialize(TestContext testContext)
        //{
        //}
        //
        //Mit ClassCleanup führen Sie Code aus, nachdem alle Tests in einer Klasse ausgeführt wurden.
        //[ClassCleanup()]
        //public static void MyClassCleanup()
        //{
        //}
        //
        //Mit TestInitialize können Sie vor jedem einzelnen Test Code ausführen.
        //[TestInitialize()]
        //public void MyTestInitialize()
        //{
        //}
        //
        //Mit TestCleanup können Sie nach jedem einzelnen Test Code ausführen.
        //[TestCleanup()]
        //public void MyTestCleanup()
        //{
        //}
        //
        #endregion


        /// <summary>
        ///Ein Test für "EnumerateDirectory"
        ///</summary>
        [TestMethod()]
        public void EnumerateDirectoryTest()
        {
            SqlString directory = new SqlString(@"C:\Windows\"); // TODO: Passenden Wert initialisieren
            SqlString searchPattern = new SqlString(); // TODO: Passenden Wert initialisieren
            SqlString directoryName = new SqlString(); // TODO: Passenden Wert initialisieren
            SqlString name = new SqlString(); // TODO: Passenden Wert initialisieren
            SqlString fullName = new SqlString(); // TODO: Passenden Wert initialisieren
            SqlInt64 size = new SqlInt64(); // TODO: Passenden Wert initialisieren
            SqlBoolean isDirectory = new SqlBoolean(); // TODO: Passenden Wert initialisieren
            SqlDateTime creationTime = new SqlDateTime(); // TODO: Passenden Wert initialisieren
            SqlDateTime creationTimeUtc = new SqlDateTime(); // TODO: Passenden Wert initialisieren
            SqlDateTime lastAccessTime = new SqlDateTime(); // TODO: Passenden Wert initialisieren
            SqlDateTime lastAccessTimeUtc = new SqlDateTime(); // TODO: Passenden Wert initialisieren
            SqlDateTime lastWriteTime = new SqlDateTime(); // TODO: Passenden Wert initialisieren
            SqlDateTime lastWriteTimeUtc = new SqlDateTime(); // TODO: Passenden Wert initialisieren
            String sep = new String(' ', 5);
            foreach (String entry in TabledValueFunction.EnumerateDirectory(directory, searchPattern))
            {
                TabledValueFunction_Accessor.FillEnumerateDirectory(entry, out directoryName, out name, out fullName, out size, out isDirectory, out creationTime, out creationTimeUtc, out lastAccessTime, out lastAccessTimeUtc, out lastWriteTime, out lastWriteTimeUtc);
                String dir = directoryName.IsNull == true ? null : directoryName.Value;
                long s = size.IsNull == true ? -1 : size.Value;
                Console.WriteLine(String.Concat(dir, sep, name.Value, sep, fullName.Value, sep, s, sep, isDirectory.Value, sep, creationTime.Value, sep, creationTimeUtc.Value, sep, lastAccessTime.Value, sep, lastAccessTimeUtc.Value, sep, lastWriteTime.Value, sep, lastWriteTimeUtc.Value));
            }
        }

        /// <summary>
        ///Ein Test für "SplitStringToTable"
        ///</summary>
        [TestMethod()]
        public void SplitStringToTableTest()
        {
            SqlString myString = System.IO.File.ReadAllText(@"C:\Windows\ntbtlog.txt");
            SqlString row = new SqlString(Environment.NewLine); // TODO: Passenden Wert initialisieren
            SqlString column = new SqlString(" "); // TODO: Passenden Wert initialisieren
            SqlInt32 index = new SqlInt32(); // TODO: Passenden Wert initialisieren
            SqlString col1 = new SqlString(); // TODO: Passenden Wert initialisieren
            SqlString col2 = new SqlString(); // TODO: Passenden Wert initialisieren
            SqlString col3 = new SqlString(); // TODO: Passenden Wert initialisieren
            SqlString col4 = new SqlString(); // TODO: Passenden Wert initialisieren
            SqlString col5 = new SqlString(); // TODO: Passenden Wert initialisieren
            SqlString col6 = new SqlString(); // TODO: Passenden Wert initialisieren
            SqlString col7 = new SqlString(); // TODO: Passenden Wert initialisieren
            SqlString col8 = new SqlString(); // TODO: Passenden Wert initialisieren
            SqlString col9 = new SqlString(); // TODO: Passenden Wert initialisieren
            SqlString col10 = new SqlString(); // TODO: Passenden Wert initialisieren
            foreach(TabledValueFunction.SplitStruct item in TabledValueFunction.SplitStringToTable(myString, row, column))
            {
                TabledValueFunction_Accessor.FillSplitStringToTable(item, out index, out col1, out col2, out col3, out col4, out col5, out col6, out col7, out col8, out col9, out col10);
            }
        }
    }
}
